<?php

/**
 * Класс для отображения сообщений и комментариев из базы данных в виде HTML-кода
 *
 * @author nk11k
 */

class HTMLGenerate {

    /**
     *
     * @var MySQLDB объект класса для работы с базой данных MySQL 
     */
    private $client_db;

    /**
     * Конструктор класса: подключается к базе MySQLDB, инициализирует переменную
     * $client_db
     */
    function __construct() {
        global $cfg;
        $this->client_db = new $cfg->dbmethod;
    }    
    
    /**
     * Генерирует HTML-код для вывода на экран сообщения $msg
     * 
     * @access public
     * @param string $msg строка сообщения, которую необходимо вывести
     * @return boolean в зависимости от выполнения операции возвращает TRUE или FALSE
     */
    public function showStatusMessage($msg) {
        if (is_string($msg) && !empty($msg)) {
            echo "<p align=\"center\">" . $msg . "</p>";
            return TRUE;
        } else if (!is_string($msg)) {
            echo ('showStatusMessage: argument type of $msg is ' . gettype($msg));
            echo ('<br> value is ' . $msg);
        }
        return FALSE;
    }

    /** 
     * Генерирует HTML-код для вывода сообщений гостевой книги с комментариями
     * 
     * Подключается к базе данных MySQL, получает список сообщений в порядке от новых к старым,
     * генерирует HTML-код на основе шаблона и выводит его; для каждого сообщения получает список
     * комментариев в порядке от старых к новым и выводит их сразу после сообщения, к которому
     * они были сделаны
     * 
     * @access public
     * @return boolean true, если книга имеет сообщения, false - иначе
     */
    public function showGuestBookMessages() {
        $messages = $this->client_db->getAllMessages();
        if (!$messages) {
            echo "<p align=\"center\">Guestbook is empty!</p>";
            return FALSE;
        } else {
            $totalmessages = sizeof($messages);
            echo "<p align=\"center\">Total messages: $totalmessages</p>";
            $i = 0;
            /* выводим в html все сообщения */
            while ($i < $totalmessages) {
                $message = $messages[$i];
                $hiddenmsgsinput = '<input type="hidden" value="' . $message['messageid'] . '" name="msgid"/>';
                include ("./views/message_table.html");

                /* получаем все комментарии к сообщению */
                $comments = $this->client_db->getAllCommentsToMessage($message['messageid']);
                $j = 0;
                $commentsnumber = sizeof($comments);
                /* выводим в html все комментарии */
                while ($j < $commentsnumber) {
                    $commentary = $comments[$j];
                    $hiddencommentinput = '<input type="hidden" value="' . $commentary['commentid'] . '" name="cmtid"/>';
                    include ("./views/commentary_table.html");
                    $j++;
                }
                $i++;
            }
        }
        return TRUE;
    }

    /**
     * Отображение сообщения с номером $msgid и всех комментариев к нему
     * 
     * Подключается к базе данных, получает искомое сообщение и комментарии к нему,
     * генерирует HTML-код и выводит его
     * 
     * @access public
     * @param integer $msgid номер сообщения, к которому необходимо отобразить комментарии
     * @return boolean в случае успешной обработки выводит TRUE, иначе - FALSE
     */
    public function showSourceMessageWithComments($msgid) {
        if (!is_numeric($msgid)) {
            echo ("showSourceMessageWithComments: wrong argument type");
            return FALSE;
        }
        /* выводим в html сообщение */
        if (!$this->showMessageByID($msgid, false))
            return FALSE;

        /* получаем все комментарии к сообщению */
        $comments = $this->client_db->getAllCommentsToMessage($msgid);
        $i = 0;
        $commentsnumber = sizeof($comments);
        /* выводим в html все комментарии */
        if ($commentsnumber == 0)
            echo '<p align="center">No comments added yet</p>';
        else {
            while ($i < $commentsnumber) {
                $commentary = $comments[$i];
               $hiddencommentinput = '<input type="hidden" value="' . $commentary['commentid'] . '" name="cmtid"/>';
                include ("./views/commentary_table_nobuttons.html");
                $i++;
            }
        }
        return TRUE;
    }

    /**
     * Генерирует и выводит HTML-код сообщения, указанного в качестве аргумента функции
     * 
     * @access public
     * @param integer $msgid номер сообщения
     * @param boolean $buttons выводить ли кнопки Comment, Edit, Delete на форме
     * @return boolean в случае успешной обработки выводит TRUE, иначе - FALSE
     */
    public function showMessageByID($msgid, $buttons=TRUE) {
        /* выводим в html все сообщения */
        if (!is_numeric($msgid) || !is_bool($buttons)) {
            echo ("showMessageByID: Wrong argument type");
            return FALSE;
        }
        $message = $this->client_db->getMessageByID($msgid);
        if (!is_array($message))
            return FALSE;
        if ($buttons) {
            $hiddenmsgsinput = '<input type="hidden" value="' . $message['messageid'] . '" name="msgid"/>';
            include ("./views/message_table.html");
        } else {
            include ("./views/message_table_nobuttons.html");
        }
        return TRUE;
    }

    /**
     * Генерирует и выводит HTML-код комментария, указанного в качестве аргумента функции
     * 
     * @access public
     * @param integer $msgid номер сообщения, к которому сделан комментарий
     * @param integer $cmtid номер комментария
     * @param boolean $buttons выводить ли кнопки Comment, Edit, Delete на форме
     * @return boolean
     */
    public function showCommentaryByID($msgid, $cmtid, $buttons) {
        if (!is_numeric($msgid) || !is_numeric($cmtid) || !is_bool($buttons)) {
            echo ("showCommentaryByID: Wrong argument type");
            echo ('<br>$msgid is ' . gettype($msgid));
            echo ('<br>$cmtid is ' . gettype($cmtid));
            echo ('<br>$buttons is ' . gettype($buttons));
            return FALSE;
        }

        $commentary = $this->client_db->getCommentaryByID($msgid, $cmtid);
        if (!is_array($commentary)) return FALSE;
        /* выводим в html все комментарии */
        if ($buttons) {
            $hiddencommentinput = '<input type="hidden" value="' . $commentary['commentid'] . '" name="cmtid"/>';
            include ("./views/commentary_table.html");
        } else {
            include ("./views/commentary_table_nobuttons.html");
        }
        return TRUE;
    }

}
